package network;

import java.io.IOException;
import java.net.*;
import java.util.Scanner;

//ip使用的字符串是点分十进制风格,"192.168.2.100"
public class UdpEchoClient {
    DatagramSocket socket = new DatagramSocket();
    //客户端这边一般不需要手动指定端口号(端口是始终固定的),系统自动分配一个空闲的端口号,主要无法确定手都指定的端口是可用的(可能被别的进程占用了)
    //服务器这边,要指定端口号,服务器的端口固定,客户端是自由的,不然客户端就找不到服务器在哪了
    private String serverIP;
    private int serverPort;

    public UdpEchoClient(String serverIP,int serverPort) throws SocketException {//客户端需要主动给服务器发起请求,发起请求的前提是知道服务器在哪
        //请求的目的Ip和目的端口,请求的ip和端口就是客户的本机
        this.serverIP = serverIP;
        this.serverPort = serverPort;
        socket = new DatagramSocket();
    }
    public void start() throws IOException {
        System.out.println("客户端启动!");
        //四个步骤
        System.out.print("->");//表示提示用户接下来要输入的内容
            //1.从控制台读取要发送的请求数据
        Scanner scanner = new Scanner(System.in);
        while (true){
            if (!scanner.hasNext()) {
                break;
            }
            String request = scanner.next();
            //2.构造请求并发送
            DatagramPacket requestPacket = new DatagramPacket(request.getBytes(),request.getBytes().length,
                    InetAddress.getByName(serverIP),serverPort);
            socket.send(requestPacket);
            //此处ip使用的字符串是点分十进制风格,"192.168.2.100"
            //3.读取服务器的响应
            DatagramPacket responsePacket = new DatagramPacket(new byte[4096],4096);//
            socket.receive(responsePacket);
            //4.把响应显示在控制台上
            String response = new String(responsePacket.getData(),0,responsePacket.getLength());
            System.out.println(response);
        }



    }

    public static void main(String[] args) throws IOException {
        UdpEchoClient client = new UdpEchoClient("127.0.0.1",9090);//"127...这个表示的就是本机ip
        client.start();
    }
}
